www.gusucode.com > VC++下的串行数据通信以及八个串口编程实例- > VC++下的串行数据通信以及八个串口编程实例-/第7章 智能安防报警系统/CommSettingDlg.cpp

    // CommSettingDlg.cpp : implementation file
//

#include "stdafx.h"
#include "Alert.h"
#include "CommSettingDlg.h"
#include "regKey.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif


CString GetSetting(CString key, CString ValueName)
{
	CString res;
	DWORD count=100;
	CRegKey regKey;
	regKey.Open(HKEY_CURRENT_USER,"Software\\Alert\\"+key);
	regKey.QueryValue(res.GetBuffer(100),ValueName,&count);
	res.ReleaseBuffer();
	regKey.Close();
	return res;
}

void SaveSetting(CString key,CString ValueName,CString value)
{
	CRegKey regKey;
	regKey.Create(HKEY_CURRENT_USER,"Software\\Alert\\"+key);
	regKey.Open(HKEY_CURRENT_USER,"Software\\Alert\\"+key);
	regKey.SetValue(value,ValueName);
	regKey.Close();
}

/////////////////////////////////////////////////////////////////////////////
// CCommSettingDlg dialog


CCommSettingDlg::CCommSettingDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CCommSettingDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CCommSettingDlg)
	m_strChoose = _T("串口1");
	m_strDataBits = _T("8");
	m_strParity = _T("N");
	m_strSpeed = _T("9600");
	m_strStopBits = _T("1");
	//}}AFX_DATA_INIT
	m_nFlow=0;
}


void CCommSettingDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CCommSettingDlg)
	DDX_Text(pDX, IDC_COMMCHOOSE, m_strChoose);
	DDX_CBString(pDX, IDC_DATABITS, m_strDataBits);
	DDX_CBString(pDX, IDC_PARITY, m_strParity);
	DDX_CBString(pDX, IDC_SPEED, m_strSpeed);
	DDX_CBString(pDX, IDC_STOPBITS, m_strStopBits);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CCommSettingDlg, CDialog)
	//{{AFX_MSG_MAP(CCommSettingDlg)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CCommSettingDlg message handlers

BOOL CCommSettingDlg::OnInitDialog() 
{
	CString commSetting = GetSetting(CString("PortSetting\\Com")+m_strChoose.Right(1)+"\\", "commSetting");
	CString commHandShaking = GetSetting(CString("PortSetting\\Com")+m_strChoose.Right(1)+"\\", "commHandshaking");
	if(commSetting!="" && commHandShaking!="")
	{
		int index1,index2,index3;
		index1=commSetting.Find(',',0);
		index2=commSetting.Find(',',index1+1);
		index3=commSetting.Find(',',index2+1);
		m_strSpeed=commSetting.Left(index1);
		m_strParity=commSetting.Mid(index1+1,index2-index1-1);
		char c=m_strParity.GetAt(0);
		switch(c)
		{
		case 'N':
			m_strParity="None";
			break;
		case 'O':
			m_strParity="Odd";
			break;
		case 'E':
			m_strParity="Even";
			break;
		case 'M':
			m_strParity="Mark";
			break;
		case 'S':
			m_strParity="Space";
			break;
		default:
			m_strParity="None";
			break;
		}
		m_strDataBits=commSetting.Mid(index2+1,index3-index2-1);
		m_strStopBits=commSetting.Mid(index3+1);

		m_nFlow = atoi(commHandShaking.GetBuffer(10));
	}

	CDialog::OnInitDialog();
	
	// TODO: Add extra initialization here
	((CButton*)GetDlgItem(IDC_RADIO1+m_nFlow))->SetCheck(1); 
	
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}


void CCommSettingDlg::OnOK() 
{
	// TODO: Add extra validation here
	if (!UpdateData(TRUE))
	{
		TRACE0("UpdateData failed during dialog termination.\n");
		// the UpdateData routine will set focus to correct item
		return;
	}

	m_nFlow=GetCheckedRadioButton(IDC_RADIO1,IDC_RADIO4)-IDC_RADIO1;

	CString commSetting=m_strSpeed+","+m_strParity.Left(1)+","+m_strDataBits+","+m_strStopBits;
	CString commHandShaking;
	itoa(m_nFlow,commHandShaking.GetBuffer(10),10);
	commHandShaking.ReleaseBuffer();

	SaveSetting(CString("PortSetting\\Com")+m_strChoose.Right(1),"commSetting",commSetting);
	SaveSetting(CString("PortSetting\\Com")+m_strChoose.Right(1),"commHandShaking",commHandShaking);

	EndDialog(IDOK);
}